<?php

class AuthController extends Controller
{

    public function actionLogin()
    {
	if (!Yii::app()->user->getIsGuest()) {
	    $this->redirect('/');
	}
	$service = Yii::app()->request->getQuery('service');
	if (isset($service)) {
	    $authIdentity = Yii::app()->eauth->getIdentity($service);
	    $authIdentity->redirectUrl = Yii::app()->user->getReturnUrl();
	    $authIdentity->cancelUrl = $this->createAbsoluteUrl('auth/login');
	    if ($authIdentity->authenticate()) {
		$identity = new ServiceUserIdentity($authIdentity);
		if ($identity->authenticate()) {
		    Yii::app()->user->login($identity, Yii::app()->params['auth']['cookieTime']);
		    $authIdentity->redirect();
		}
		else {
		    $authIdentity->cancel();
		}
	    }


	    $this->redirect(array('auth/login'));
	}
	elseif (Yii::app()->getRequest()->getIsPostRequest()) {	    
	    $login = Yii::app()->request->getParam('login');
	    $password = Yii::app()->request->getParam('password');
	    $identity = new UserIdentity($login, $password);	    
	    if ($identity->authenticate()) {
		Yii::app()->user->login($identity, Yii::app()->params['auth']['cookieTime']);
		if (Yii::app()->getRequest()->getIsAjaxRequest()) {
		    echo CJSON::encode(array('success' => true));
		    Yii::app()->end();
		}
		else {		    
		    $this->redirect('/');
		}
	    }
	    else {		
		if (Yii::app()->getRequest()->getIsAjaxRequest()) {
		    echo CJSON::encode(array('error' => $identity->errorMessage));
		    Yii::app()->end();
		}
		else {
		    Yii::app()->user->setFlash('loginErr', $identity->errorMessage);
		    $this->render('login');		    
		}
	    }
	}else {	    
	    $this->render('login');
	}
    }    

    public function actionLogout()
    {
	Yii::app()->user->logout();
	Yii::app()->getRequest()->redirect(Yii::app()->getRequest()->getUrlReferrer());
    }

    public function actionRecover()
    {
	$success = false;
	$code = Yii::app()->getRequest()->getParam('code');
	if (Yii::app()->getRequest()->getIsPostRequest()) {
	    $login = Yii::app()->getRequest()->getParam('login');
	    if (empty($login)) {
		Yii::app()->user->setFlash('badLoginEmail', 'Логин или e-mail не указан');
	    }
	    if ($login) {
		$user = FactoryService::get('user')->getBy('login = :login OR email = :login', array(':login' => $login));
		if (!$user) {
		    Yii::app()->user->setFlash('userNotExist', 'Пользователя с таким логином или e-mail у нас нету');
		}
		if ($user && $user->getDbData('email')) {
		    $code = FactoryService::get('user')->generateRecoverCode($user);
		    if ($code) {
			$mail = new Mail(Yii::app()->mailer);
			$mail->addAddress($user->getDbData('email'))
				->setSubject('revovery')
				->setBody($this->renderPartial('recover-message', array('code' => $code, 'serverName' => Yii::app()->getRequest()->getServerName()), true));
			if ($mail->send()) {
			    Yii::app()->user->setFlash('emailSended#', 'Письмо отправлено Вам на почту');
			    $success = true;
			}
		    }
		    else {
			Yii::app()->user->setFlash('codeError', 'Произошла ошибка');
		    }
		}
	    }
	}
	$this->render($success ? 'recover-success' : 'recover');
    }

    public function actionRecoverPassword()
    {
	if (Yii::app()->getRequest()->getIsPostRequest()) {
	    $password = Yii::app()->getRequest()->getParam('password');
	    $confirmPassword = Yii::app()->getRequest()->getParam('confirmPassword');
	    if ($password != $confirmPassword) {
		Yii::app()->user->setFlash('compareFalse', 'Пароли не совпадают');
	    }
	    else {
		$code = Yii::app()->getRequest()->getParam('code');
		if (!$code) {
		    throw new CHttpException(404, "Нету данной страницы");
		}
		$user = FactoryService::get('user')->getUserByRecoveryCode($code);
		if (!$user) {
		    Yii::app()->user->setFlash('wrongCode', 'Код востановления неверный');
		}
		else {
		    $user->setDbData((object)array('password' => md5(Yii::app()->params['pwdSalt'] . $password)));
		    if (FactoryService::get('user')->save($user)) {
			Yii::app()->user->setFlash('changeCodeSuccess#', 'Ваш пароль изменен');
			$identity = new UserIdentity($user->getDbData('login'), $password);
			if ($identity->authenticate()) {
			    Yii::app()->user->login($identity, Yii::app()->params['auth']['cookieTime']);	
			    Yii::app()->getRequest()->redirect('/');
			}
			else {
			    Yii::app()->user->setFlash('enterError', $identity->errorMessage);			    
			}
			
		    }
		}
	    }
	}
	$this->render('recover-password');
    }

    public function actionRegister()
    {
	$this->layout = null;
	if (!Yii::app()->user->getIsGuest()) {
	    echo CJSON::encode(array('error' => 'Вы уже зарегистрированы'));
	    Yii::app()->end();
	}

	if (!Yii::app()->getRequest()->getIsAjaxRequest()) {
	    echo CJSON::encode(array('error' => 'Ошибка регистрации'));
	    Yii::app()->end();
	}

	$data = Yii::app()->getRequest()->getParam('register');
	if (empty($data)) {
	    echo CJSON::encode(array('error' => 'Ошибка регистрации'));
	    Yii::app()->end();
	}

	$user = FactoryService::get('user')->getBy('login = :login OR email = :email', array(
	    ':login' => $data['login'],
	    ':email' => $data['email'],
		)
	);
	if ($user) {
	    echo CJSON::encode(array('error' => 'Такой логин или почта зарегистрированы'));
	    Yii::app()->end();
	}
	$password = $data['password'];
	$data['password'] = md5(Yii::app()->params['pwdSalt'] . $password);
	$data['register_date'] = date('Y-m-d H:i');
	$data['visit_date'] = date('Y-m-d H:i');
	$user = new UserModel((object) $data);
	if (FactoryService::get('user')->save($user)) {
	    $identity = new UserIdentity($user->getDbData('login'), $password);
	    if ($identity->authenticate()) {
		Yii::app()->user->login($identity, Yii::app()->params['auth']['cookieTime']);
		echo CJSON::encode(array('success' => true));
		Yii::app()->end();
	    }
	    else {
		echo CJSON::encode(array('error' => $identity->errorMessage));
		Yii::app()->end();
	    }
	}
	else {
	    echo CJSON::encode(array('error' => 'Ошибка регистрации'));
	    Yii::app()->end();
	}
    }

    public function actionIssetUser()
    {
	if (!Yii::app()->request->getIsAjaxRequest()) {
	    echo CJSON::encode(array(
		'error' => 'not allowed'
	    ));
	    Yii::app()->end();
	}

	$model = new ARUser('register');
	$model->attributes = $_POST['ARUser'];

	$login = $model->login;
	if ($login) {
	    if (ARUser::model()->exists('`login` = :login', array(':login' => $login))) {
		echo CJSON::encode(array('error' => array('label' => 'login', 'message' => 'Пользователь с таким логином существует')));
		Yii::app()->end();
	    }
	}
	$email = $model->email;
	if ($email) {
	    if (ARUser::model()->exists('`email` = :email', array(':email' => $email))) {
		echo CJSON::encode(array('error' => array('label' => 'email', 'message' => 'Пользователь с таким email существует')));
		Yii::app()->end();
	    }
	}

	echo CJSON::encode(array('notice' => '1'));
    }

}